package com.siwei.mes.common.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.Date;

/**
 * 处理null的工具类
 *
 * @Description: 处理null的工具类
 * @Version: 1.0
 * @author: mlchen
 * @date: 2024/8/15 11:31
 */
@Slf4j
public class NullUtils {
    /**
     * 如果是null返回空字符串
     *
     * @param str
     * @return
     */
    public static String ifNull(String str) {
        try {
            if (StringUtils.isBlank(str)) {
                return "";
            }else if("---".equals(str)){
                return "0";
            }
            return str;
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * 如果是null返回空字符串
     *
     * @param str
     * @return
     */
    public static String ifNullReplaceM(String str) {
        try {
            if (StringUtils.isBlank(str)) {
                return "";
            }
            return str.replace("mm", "");
        } catch (Exception e) {
            return "";
        }
    }

    public static String ifNullFoSum(String str) {
        try {
            if (StringUtils.isBlank(str)) {
                return "";
            }
            double value = Double.parseDouble(str);
            double dou = value * 1000;
            return String.valueOf(dou);
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * 如果是null返回设置的默认值
     *
     * @param str
     * @return
     */
    public static String ifNull(Object str, String defaultValue) {
        try {
            if (str == null) {
                return defaultValue;
            }
            return String.valueOf(str);
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * object 转string
     *
     * @param str
     * @return
     */
    public static String ifNull(Object str) {
        try {
            if (str == null) {
                return "";
            }
            return String.valueOf(str);
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * long转string
     *
     * @param str
     * @return
     */
    public static String ifNull(Long str) {
        try {
            if (str == null) {
                return null;
            }
            return String.valueOf(str);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 转成double  如果是null返回null
     *
     * @param str
     * @return
     */
    public static Double ifNullDouble(String str) {
        try {
            if (StringUtils.isBlank(str)) {
                return null;
            }
            return Double.valueOf(str);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 转成BigDecimal  如果是null返回null
     *
     * @param str
     * @return
     */
    public static BigDecimal ifNullBigDecimal(String str) {
        try {
            if (StringUtils.isBlank(str)) {
                return null;
            }
            return new BigDecimal(str);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 转成Integer  如果是null返回null
     *
     * @param str
     * @return
     */
    public static Integer ifNullInteger(String str) {
        try {
            if (StringUtils.isBlank(str)) {
                return null;
            }
            return Integer.valueOf(str);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 转成Integer  如果是null返回null
     *
     * @param str
     * @return
     */
    public static Long ifNullLong(String str) {
        try {
            if (StringUtils.isBlank(str)) {
                return null;
            }
            return Long.valueOf(str);
        } catch (Exception e) {
            return null;
        }
    }

    public static Integer ifNullInteger(String str, Integer defaultValue) {
        try {
            if (StringUtils.isBlank(str)) {
                return defaultValue;
            }
            return Integer.valueOf(str);
        } catch (Exception e) {
            return null;
        }
    }

    public static Integer ifNullInteger(Object str, Integer defaultValue) {
        try {
            if (str == null) {
                return defaultValue;
            }
            return Integer.valueOf(str.toString());
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 转成Date  如果是null返回null
     *
     * @param str
     * @return
     */
    public static Date ifNullDate(String str) {
        try {
            if (StringUtils.isBlank(str)) {
                return null;
            }
            return DateHelper.parseDateTime(DateHelper.getDefaultDateTimeFormatTwo(), DateHelper.getDefaultLocal(), str);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 转成Date  如果是null返回null
     *
     * @param date
     * @return
     */
    public static Date ifNullDate(Date date) {
        try {
            if (date == null) {
                return null;
            }
            return date;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 是否渗水
     *
     * @param str
     * @return
     */
    public static String isSs(String str) {
        try {
            if (StringUtils.isBlank(str)) {
                return "";
            }
            if ("否".equals(str)) {
                return "未渗水";
            } else if ("是".equals(str)) {
                return "已渗水";
            } else {
                return "";
            }
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * 格式化字符串
     *
     * @param str
     * @return
     */
    public static String unescapeJava(String str) {
        if (StringUtils.isNotBlank(str)) {
            return StringEscapeUtils.unescapeJava(str).replaceAll("\"", "");
        }
        return null;
    }

    /**
     * 判断字符串是否为null或null的字符串
     *
     * @param str
     * @return
     */
    public static boolean isNull(String str) {
        if (StringUtils.isBlank(str) || "null".equals(str)) {
            return true;
        }
        return false;
    }

    public static String stringToDoubleAndDivide(String str) {
        try {
            if (StringUtils.isBlank(str)) {
                return "";
            }
            double value = Double.parseDouble(str);
            double dou = value / 1000;
            DecimalFormat df = new DecimalFormat("0.000");
            return df.format(dou);
        } catch (NumberFormatException e) {
            log.info("输入的字符串无法转换为 double 类型。str :" + str);
            return "";
        }
    }

    public static int stringToIntRounding(String s) {
        try {
            BigDecimal bd = new BigDecimal(s);
            bd = bd.setScale(0, RoundingMode.HALF_UP);
            return bd.intValue();
        } catch (NumberFormatException e) {
            log.info("输入的字符串无法转换为数字：" + s);
            return 0;
        }
    }

    public static boolean isNumberGreaterThanZero(String s) {
        try {
            // 尝试将字符串转换为 double 类型
            double num = Double.parseDouble(s);
            // 返回是否大于 0 的结果
            return num > 0;
        } catch (NumberFormatException e) {
            // 如果字符串格式不正确，返回 false
            log.info("输入的字符串无法转换为数字：" + s);
            return false;
        }
    }

    /**
     * 判断字符串是否为null或null的字符串
     *
     * @param isQualified
     * @return
     */
    public static String isQualified(Integer isQualified) {
        if (isQualified == null) {
            return null;
        }
        if(isQualified == 1){
            return "合格";
        }else{
            return "不合格";
        }
    }
}
